在昨天的文章中,我們使用 Pydantic 定義了嚴謹的美食推薦資料模型,並在 FastAPI 中實作了具備預算、料理分類與地區篩選邏輯的推薦端點(POST /api/v1/recommend/)。
現在,我們的後端微服務已經具備運算能力,但真實世界的使用情境通常不是由使用者手動去發 cURL 或開 Swagger 文件,而是透過對話介面或排程觸發。
今天的核心任務,就是讓 n8n 扮演智慧排程與自動化神經中樞的角色:學習如何在 n8n 中使用 HTTP Request 節點呼叫本地運行的 FastAPI,並完成資料格式的提取與動態映射!
在開始配置節點之前,必須先釐清一個最容易踩雷的網路觀念:
http://localhost:8000。⚠️ 關鍵注意:
如果你在 n8n 容器內部的 HTTP Request 節點填寫http://localhost:8000,n8n 會以為你要連的是「n8n 容器自己本身」,進而拋出ECONNREFUSED連線拒絕錯誤!解法:在 Docker 容器內部要存取宿主主機(Windows 本機)的連接埠時,必須將網址換成:
[http://host.docker.internal:8000](http://host.docker.internal:8000)這是 Docker 內建專門用來解析宿主主機 IP 的特殊網域名稱。
打開瀏覽器進入 n8n 介面(http://localhost:5678),點擊右上角 Add workflow 建立一個新流程。
為了方便開發與除錯,我們先使用手動觸發節點:
在真實場景中,這一步通常來自 LINE Bot 的訊息解析,這裡我們先用 Set 節點模擬傳入的參數:
+ 新增節點,搜尋並選擇 Edit Fields (Set)。Mock User Input。user_id(String):user_ironman_06
cuisine(String):甜點/下午茶
budget_max(Number):350
location(String):板橋
notes(String):想吃草莓戚風蛋糕
這是今天最關鍵的一步,讓 n8n 將上一節點的資料打包發送給 FastAPI:
+ 新增節點,搜尋並選擇 HTTP Request。POST
http://host.docker.internal:8000/api/v1/recommend/
JSON
Using Fields Below(或切換至 JSON 模式)Mock User Input 的欄位動態綁定進來:
user_id:{{ $json.user_id }}
cuisine:{{ $json.cuisine }}
budget_max:{{ $json.budget_max }}
location:{{ $json.location }}
notes:{{ $json.notes }}
💡 提示:直接從左側拖曳變數標籤到右側欄位,n8n 就會自動生成
{{ $json.xxx }}運算式!
FastAPI 回傳的資料是標準的 JSON 陣列,我們加上一個簡單的文字格式化節點,把餐廳資訊組合成適合發給使用者的親切訊息:
+ 新增 Edit Fields (Set) 或 Code 節點。reply_message,填入以下表達式:
🎉 為您精選的美食推薦清單來囉!
【推薦店家】:{{ $json.recommendations[0].name }}
【分類】:{{ $json.recommendations[0].cuisine }}
【平均消費】:約 {{ $json.recommendations[0].price_avg }} 元
【所在位置】:{{ $json.recommendations[0].location }}
【Google 評分】:⭐️ {{ $json.recommendations[0].rating }}
【招牌必點】:{{ $json.recommendations[0].signature_dish }}
【小編短評】:{{ $json.recommendations[0].reason }}
請確認你的 PowerShell 終端機中,FastAPI 仍然處於熱重載運作中:
uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload
確保 --host 設定為 0.0.0.0,這樣才能接收來自 Docker 容器內部的連線請求。
回到 n8n 畫布,點擊下方的 Test workflow 按鈕:
1.連線狀態:所有節點依序亮起綠色勾勾。
2.FastAPI 終端機日誌:會立即印出一行成功連線的請求日誌:
INFO: 172.18.0.1:xxxxx - "POST /api/v1/recommend/ HTTP/1.1" 200 OK
3.輸出檢查:點開最後一個節點的 Output 面板,確認 reply_message 成功解析出「恬淡日常法式甜點」的精美格式化排版!
今天我們打通了自動化架構中最關鍵的一環:使用 n8n 作為橋樑,跨越容器與本地宿主機的網路邊界,精準調用 FastAPI 微服務!
現在我們的資料鏈路是:
輸入參數 ➜ n8n 流程排程 ➜ FastAPI 核心演算法/資料庫 ➜ 格式化輸出
明天 Day 07,我們將把前幾天在 Dify 設定好的 Google Gemini 大腦整合進來:在 n8n 中串接 Dify API,讓 AI 大腦自動解析使用者的自然語言對話,並動態提取出推薦參數! 敬請期待!